#!/usr/bin/python3
# -*- coding: utf8 -*-
# Date   : 2021/06/27
# Author : Kwan
# Email  : allenxian@live.com
# Blog   : https://my.oschina.net/u/4173440

import subprocess
from project.flasky import db
from project.define import db_logger


TableName = "app_custom"


def identify_carpark_id():
    """
    获取应用ID
    """
    ret = subprocess.getoutput("dmidecode -s system-serial-number")
    return ret.replace(' ', '')


class Custom(db.Model):
    """
    应用信息
    """
    __tablename__ = TableName
    # 系统ID
    AppID = db.Column(db.String(64), primary_key=True, nullable=False)
    # 应用版本
    Version = db.Column(db.String(8))
    # 应用名称
    AppName = db.Column(db.String(64), nullable=False)
    # 品牌
    Brand = db.Column(db.String(16))
    # 公司名称
    Company = db.Column(db.String(64))
    # 公司地址
    Address = db.Column(db.String(128))
    # 公司电话
    Phone = db.Column(db.String(16))
    # 网站
    Website = db.Column(db.String(64))

    def __init__(self) -> None:
        super().__init__()
        self.AppID = identify_carpark_id()
        self.Version = '2.1'
        self.AppName = '停車場管理系統'
        self.Brand = 'PyCarPark'
        self.Company = 'PyCarPark'
        self.Address = '請填寫聯係地址'
        self.Phone = '請填寫聯係電話'
        self.Website = '請填寫網站地址'

    def to_dict(self):
        """
        转换键值对
        """
        return dict([(c.name, getattr(self, c.name)) for c in self.__table__.columns])

    @staticmethod
    def columns_name():
        """
        数据表标题
        """
        ColumnName = {
            'AppID': '應用ID', 'AppName': '應用名稱', 'Version': '系統版本', 'Brand': '品牌名稱',  'Company': '公司名稱',
            'Address': '聯係地址', 'Phone': '聯係電話', 'Website': '公司網站'}
        return ColumnName

    @staticmethod
    def modify_data(**kwargs):
        """
        修改数据
        """
        update = False
        r = Custom.query.first()
        if r:
            for k, v in kwargs.items():
                if hasattr(r, k):
                    if getattr(r, k) != v:
                        setattr(r, k, v)
                        update = True
            if update:
                try:
                    db.session.commit()
                    db_logger.debug(f"{TableName} => 更新成功：{kwargs}")
                except Exception as e:
                    db.session.rollback()
                    db_logger.error(f"{TableName} => 更新失败：{kwargs} 原因：{e}")
                    update = False
        return update
                

    @staticmethod
    def table_init():
        """
        初始化
        """
        r = Custom.query.first()
        if not r:
            r = Custom()
            db.session.add(r)
            db.session.commit()
            db_logger.debug(f"{TableName}：初始化成功！")
